Skip to content

palmerabollo/egov

Repository files navigation

eGov España - API de acceso a datos púbicos

Build Status

¿Te entra la risa floja cuando oyes hablar de transformación digital? ¿Ya no crees en promesas de datos abiertos? ¿Crees que está feo dilapidar dinero público en "portalitos"? Estás en el sitio adecuado.

El plan es construir APIs decentes que consulten fuentes de datos públicas (por ejemplo, páginas web) para poder utilizar los servicios de la administración de forma programática.

Prueba a consultar algunos ejemplos en una demo real:

Faltan muchos servicios por incluir y no voy a poder hacerlo solo. ¡Colabora!

Organización del proyecto

El proyecto se divide en varios paquetes:

  • packages/egov-api-server: Servidor que expone un API GraphQL para acceder a los datos públicos.
  • packages/egov-data-providers: Contiene los servicios de consulta que extraen datos de fuentes públicas. El egov-api-server utiliza este paquete.
  • packages/egov-examples: Ejemplos de uso programático de los servicios de consulta.

egov-api-server

Servidor HTTP que expone un API GraphQL para acceder a datos públicos reales (probar demo). Está desarrollado en Node.js (TypeScript) con Apollo GraphQL y es la forma más sencilla de acceder a los datos.

Example API UI

Puedes consultar el esquema de datos. He empezado con datos de localizaciones geográficas y de servicios de telecomunicaciones disponibles en la zona (antenas, canales de televisión digital, redes disponibles).

Instalación local

Sólo necesitas Node.js 10+. Debes inicializar el proyecto después de clonarlo por primera vez:

git clone git@github.com:palmerabollo/egov.git
cd egov
npm install

Y ejecutarlo:

npm run start:api-server

En http://localhost:4000 tendrás la interfaz web de acceso al API GraphQL para ejecutar tus consultas. Si te apetece cacharrear, hay más detalles sobre el proceso de desarrollo en la guía para colaboradores.

Nota: algunas administraciones tienen servidores inseguros, afectados por vulnerabilidades (CVE-2009-3555) desde hace más de una década. Esto impide el soporte de Node.js >16 / OpenSSL 3.x. Hay que investigar si se puede ignorar con la variable SSL_OP_LEGACY_SERVER_CONNECT.

egov-data-providers

Incluye la implementación de los proveedores de datos: servicios de consulta que extraen datos de fuentes públicas. Algunos servicios consultan datos cuando se solicitan (online) y otros utilizan datos locales (offline).

Crear un nuevo servicio es muy sencillo. Actualmente están desarrollados los siguientes. Echa un vistazo y propón nuevas ideas en las issues o envía tu pull request con nuevos servicios. Es muy fácil.

Servicio Clase Origen de los datos Online
Búsqueda de poblaciones y códigos postales
Categoría: General
PostalCodeService geonames.org
(local file)
Localización de antenas de telefonía móvil
Categoría: Telco
AntennaService geoportal.minetur.gob.es
(api)
Comprobación de cobertura 4G a 800MHz
Categoría: Telco
NetworkService www.llega800.es
(api)
Señales de televisión por ubicación geográfica
Categoría: Telco
DigitalTelevisionService www.televisiondigital.gob.es
(html)
Radares de tráfico
Categoría: Tráfico
TrafficRadarService www.dgt.es
(html, pdf)
Información de vehículos
Categoría: Tráfico
TrafficVehicleService www.dgt.es
(html, pdf)

egov-examples

Ejemplos de uso programático de los servicios de consulta disponibles en egov-data-providers.

import * as egov from '@egov/data-providers';

let service = new egov.AntennaService();
let antennas = await service.findAntennas(41.73, -5.32);

console.table(antennas, ['code', 'latitude', 'longitude']);

// output
// ┌─────────┬───────────────────────────────────┬───────────┬───────────┐
// │ (index) │               code                │ latitude  │ longitude │
// ├─────────┼───────────────────────────────────┼───────────┼───────────┤
// │    0    │ 'VODAFONE ESPAÑA, S.A. - 144588'  │ 41.471472 │ -4.989911 │
// │    1    │ 'VODAFONE ESPAÑA, S.A. - 144589'  │ 41.479806 │ -5.048222 │
// │    2    │ 'ORANGE ESPAGNE, SAU - CYLR2147A' │ 41.471472 │ -4.989911 │
// │    3    │ 'ORANGE ESPAGNE, SAU - CYLR2223B' │ 41.479806 │ -5.048222 │
// └─────────┴───────────────────────────────────┴───────────┴───────────┘

Incubator

Adaptadores. Soporte de múltiples lenguajes de programación

El código de eGov está desarrollado en Node.js (TypeScript). Quienes quieran contribuir con nuevos proveedores de datos en otros lenguaje de programación, tienen la posibilidad de que se ejecuten como procesos independientes que expongan un interfaz HTTP. Estos procesos adaptadores pueden obtener los datos, procesarlos y ofrecerlos a eGov a través de ese interfaz HTTP.

Hay una prueba de concepto para obtener los radares de tráfico con un proceso Python que hace scraping de los datos de radares de la DGT. Este proceso se está ejecutando como una función serverless en AWS Lambda.

data-provider --(http)--> adapter --(http scrape)--> datasource

¿Por qué serverless? Porque es la manera de hacer el proyecto económicamente sostenible, sin tener que pedir dinero por ahora.

LICENSE

Copyright 2019 - Guido García (guido.garcia AT protonmail DOT com)

Licensed under the GNU Affero General Public License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.

Third parties

Some information about postal codes is provided by geonames under a Creative Commons Attribution 4.0 License.